import 'package:flutter/material.dart';
import 'package:sp_util/sp_util.dart';

import '../pages/home.dart';
import '../pages/login.dart';
import '../pages/policy.dart';
import '../pages/mine.dart';

class NavigationObserver extends NavigatorObserver {
  /// 路由表
  static final Map<String, WidgetBuilder> routes = {
    '/': (context) => const LoginPage(),
    '/home': (context) => const HomePage(title: 'Home Page'),
    '/mine': (context) => const MinePage(),
    '/policy': (context) => const PolicyPage(),
  };

  @override
  void didPush(Route route, Route? previousRoute) {
    super.didPush(route, previousRoute);
    // 在这里处理页面推送逻辑，例如权限检查
    debugPrint('didPush: ${route.settings.name}');
    var token = SpUtil.getString("accessToken");
    debugPrint("token: $token");
    if (route.settings.name == "/") {
      if (token != null && token.isNotEmpty) {
        // 使用WidgetsBinding实例添加一个回调，确保在下一帧执行
        WidgetsBinding.instance.addPostFrameCallback((_) {
          // 获取当前Navigator的context
          final navigator = route.navigator;
          // 重定向到主页页面
          navigator?.pushNamedAndRemoveUntil('/home', (route) => route.isFirst);
        });
      }
    } else {
      if (token == null || token.isEmpty) {
        // 使用WidgetsBinding实例添加一个回调，确保在下一帧执行
        WidgetsBinding.instance.addPostFrameCallback((_) {
          // 获取当前Navigator的context
          final navigator = route.navigator;
          // 重定向到登录页面（如果在MaterialApp的路由配置 initialRoute 参数指定了初始页面，那么即使你使用 pushReplacementNamed，它也可能会显示返回箭头）
          // navigator?.pushReplacementNamed('/');
          navigator?.pushNamedAndRemoveUntil('/', (route) => route.isFirst);
        });
      }
    }
  }

  @override
  void didPop(Route route, Route? previousRoute) {
    super.didPop(route, previousRoute);
    // 在这里处理页面弹出逻辑，例如权限检查
    debugPrint('didPop: ${route.settings.name}');
    var token = SpUtil.getString("accessToken");
    debugPrint("token: $token");
    if (route.settings.name == "/") {
      if (token != null && token.isNotEmpty) {
        // 使用WidgetsBinding实例添加一个回调，确保在下一帧执行
        WidgetsBinding.instance.addPostFrameCallback((_) {
          // 获取当前Navigator的context
          final navigator = route.navigator;
          // 重定向到主页页面
          navigator?.pushNamedAndRemoveUntil('/home', (route) => route.isFirst);
        });
      }
    } else {
      if (token == null || token.isEmpty) {
        // 使用WidgetsBinding实例添加一个回调，确保在下一帧执行
        WidgetsBinding.instance.addPostFrameCallback((_) {
          // 获取当前Navigator的context
          final navigator = route.navigator;
          // 重定向到登录页面（如果在MaterialApp的路由配置 initialRoute 参数指定了初始页面，那么即使你使用 pushReplacementNamed，它也可能会显示返回箭头）
          // navigator?.pushReplacementNamed('/');
          navigator?.pushNamedAndRemoveUntil('/', (route) => route.isFirst);
        });
      }
    }
  }
}
